package com.yugao.fintech.antelope.base.config.core;

import com.yugao.fintech.antelope.base.model.enums.ConfigDefineEnum;
import com.yugao.fintech.framework.core.utils.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 扫描配置监听器
 */
@Slf4j
@Component
public class ScanConfigListener {
    private static final Map<ConfigDefineEnum, IConfigListener> configListenerMap = new ConcurrentHashMap<>();

    /**
     * 异步扫描
     */
    public void scan() {
        new Thread(() -> {
            Map<String, IConfigListener> beanMap = SpringUtils.getBeansOfType(IConfigListener.class);
            beanMap.values().forEach(e -> {
                ConfigDefineEnum configDefine = e.configDefine();
                if (Objects.isNull(configDefine)) {
                    log.error("config listener {} config key is null", e.getClass().getSimpleName());
                    return;
                }
                configListenerMap.put(configDefine, e);

            });
        }).start();
    }

    public void execListener(ConfigMsg configMsg) {
        if (Objects.isNull(configMsg)) {
            return;
        }
        ConfigDefineEnum configDefine = ConfigDefineEnum.ofByKey(configMsg.getConfigKey());
        if (!configListenerMap.containsKey(configDefine)) {
            return;
        }
        configListenerMap.get(configDefine).updateConfig(configMsg);
    }
}
